package com.sgd;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolDemo {
    private static int COREPOOLSIZE = 2; // 核心线程数
    private static int MAXIMUMPOOLSIZE = 4;// 最大线程数
    private static int KEEPALIVETIME = 60;// 非核心线程空闲时的存活时间


    public static void main(String[] args) {

        // 线程池对象的创建
        ThreadPoolExecutor excutor = new ThreadPoolExecutor(
                COREPOOLSIZE,// 核心线程数
                MAXIMUMPOOLSIZE,// 最大线程数
                KEEPALIVETIME,// 非核心线程空闲时的存活时间
                TimeUnit.SECONDS,// 存活时间的单位
                new LinkedBlockingQueue<>() // 任务队列(如果不知道任务数，就不要指定默认值)
        );

        /**
         * 观察线程实行任务的情况
         */
        for (int i = 0; i < 100; i++) {
            final int taskId = i;
            excutor.execute(() -> {
                System.out.println(Thread.currentThread().getName() + "执行了" + taskId);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "结束了" + taskId);
            });
        }

        // 关闭线程池
        excutor.shutdown();
    }
}
